// #include<REG51.H>
// #define uint unsigned int
// #define uchar unsigned char
// uint i = 0, x = 50000;
// uchar table[] = {0x18,0x24,0x42,0x81};

// void main()
// {
//     while(1)
//     {
//         for (i = 0; i < 4; i++)
//         {
//             P1 = table[i];
//             while(x--);
//         }
//     }
// }

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1 = P3 ^ 0; 
sbit key2 = P3 ^ 1;
sbit key3 = P3 ^ 2;
sbit key4 = P3 ^ 3;
uchar flag1 = 0, flag2 = 0, flag3 = 0, flag4 = 0;
uint temp;
void delay_ms(uint z)
{
    while (z--);
}
void key_scan() 
{
    if (!key1)
    {
        delay_ms(10000); 
        if (!key1)
            flag1 = 1;
    }
    if (!key2)
    {
        delay_ms(10000); 
        if (!key2)
            flag2 = 1;
    }
    if (!key3)
    {
        delay_ms(10000);
        if (!key3)
        {
            flag3 = 1;
        }
    }
    if (!key4)
    {
        delay_ms(10000);
        if (!key4)
        {
            flag4 = 1;
        }
        
    }
    
}
void main()
{
    uchar i;
    while (1)
    {
        key_scan();
        if (flag1) 
        {
            temp = 0x00;
            for (i = 0; i < 8; i++) 
            {
                temp = _crol_(temp, 1);
                P2 = ~temp;
                delay_ms(10000);
                key_scan(); //按键扫描
                if (flag2||flag3||flag4)
                {
                    flag1 = 0;
                    break;
                } 
            }
        }
        if (flag2) 
        {
            temp = 0x01;
            for (i = 0; i < 8; i++) 
            {
                temp = _crol_(temp,1);
                P2 = ~temp;
                delay_ms(10000);
                key_scan();
                if (flag1||flag3||flag4)
                {
                    flag2 = 0;
                    break;
                }
            }
        }
        if (flag3) 
        {
            temp = 0x02;
            for (i = 0; i < 8; i++) 
            {
                temp = _crol_(temp, 1);
                P2 = ~temp;
                delay_ms(10000);
                key_scan();
                if (flag1||flag2||flag4)
                {
                    flag2 = 0;
                    break;
                }
            }
        }
        if (flag4) 
        {
            temp = 0x04;
            for (i = 0; i < 8; i++) 
            {
                temp = _crol_(temp, 1);
                P2 = ~temp;
                delay_ms(10000);
                key_scan();
                if (flag1||flag2||flag3)
                {
                    flag4 = 0;
                    break;
                }
            }
        }    
    }
}
